/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	can.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-11-26
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/

#ifndef _CAN_MEM_H_
#define _CAN_MEM_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#include "stm32h7xx_hal.h"
#include <rtthread.h>
#include "can_protocol.h"
/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/

typedef enum{
	CAN_MEM_ERR_NONE,
	CAN_MEM_ERR_INIT,
	CAN_MEM_ERR_GET,
	CAN_MEM_ERR_PUT,
	CAN_MEM_ERR_FORMAT,
}can_mem_err_t;

typedef struct CAN_MEM_NODE{
	can_msg_t can_msg;
	struct CAN_MEM_NODE* next;
}can_mem_node_t;

typedef struct CAN_MEM_LIST{
	uint16_t cur_size;
	uint16_t max_size;
	can_mem_node_t* p_head;
}can_mem_list_t;

/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/

can_mem_err_t	can_mem_init(void);

can_mem_node_t* can_mem_malloc(void);

can_mem_err_t can_mem_free(can_mem_node_t* p_node);

can_mem_err_t can_mem_list_free(can_mem_list_t* p_list,can_mem_node_t* p_node);

can_mem_node_t* can_mem_list_malloc(can_mem_list_t* p_list);

can_mem_node_t* can_mem_list_pop(can_mem_list_t* p_list);

can_mem_err_t can_mem_list_push(can_mem_list_t* p_list,can_mem_node_t* p_node);
#endif
